import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
confirmed_url ='https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv'
deaths_url = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv'
recovered_url = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_recovered_global.csv'
confirmed = pd.read_csv(confirmed_url)
deaths = pd.read_csv(deaths_url)
recovered = pd.read_csv(recovered_url)
confirmed.head(5)
deaths.head(5)
recovered.head(5)
dates = confirmed.columns[4:]
confirmed_df_long = confirmed.melt(
id_vars=['Province/State', 'Country/Region', 'Lat', 'Long'],
value_vars=dates,
var_name='Date',
value_name='Confirmed'
)
deaths_df_long = deaths.melt(
id_vars=['Province/State', 'Country/Region', 'Lat', 'Long'],
value_vars=dates,
var_name='Date',
value_name='Deaths'
)
recovered_df_long = recovered.melt(
id_vars=['Province/State', 'Country/Region', 'Lat', 'Long'],
value_vars=dates,
var_name='Date',
value_name='Recovered'
)
confirmed_df_long.head(5)
deaths_df_long.head(5)
recovered_df_long.head(5)
DF = pd.merge(confirmed_df_long, deaths_df_long, on = ['Country/Region', 'Lat', 'Long', 'Province/State', 'Date'], how = 'left')
DF = pd.merge(DF, recovered_df_long, on = ['Country/Region', 'Lat', 'Long', 'Province/State', 'Date'], how = 'left')
DF.head(5)
DF.dtypes
DF = DF.rename(columns = {"Country/Region": "Country"})
DF['Country'] = DF['Country'].astype('string')
DF['Date'] = pd.to_datetime(DF['Date'])
DF = DF[['Country', 'Date', 'Confirmed', 'Deaths', 'Recovered']]
DF.set_index('Date', inplace=True)
DF.head()
def give_global_cases(df):
f = plt.figure()
plt.ticklabel_format(style = 'plain')
df.groupby(df['Date'].dt.strftime('%B'))['Confirmed'].sum().sort_values().plot(grid=True, figsize=(8,6), title='Covid-19 Global cases in timeline', ax=f.gca())
give_global_cases(DF)
def give_cases_per_country(countries_list):
temp = DF[DF['Country'].isin(countries_list)]
f = plt.figure()
plt.ticklabel_format(style = 'plain')
temp.groupby(['Country'])['Confirmed', 'Recovered', 'Deaths'].agg('sum').plot(kind='bar', grid=True, rot=0, figsize=(10, 6), ax=f.gca())
give_cases_per_country(['Poland', 'Germany', 'Czechia', 'United Kingdom', 'France'])
def give_cases_per_country_timeline(x):
DF2 = DF.query("Country == @x")
cols_plot = ['Confirmed', 'Deaths', 'Recovered']
axes = DF2[cols_plot].plot(marker='.', alpha=0.5, linestyle='None', figsize=(10, 8), subplots=True, grid=True)
for ax in axes:
ax.set_ylabel('Number of cases')
give_cases_per_country_timeline("Poland")
give_cases_per_country_timeline('Germany')
def give_generally_distribution_per_countries(countries_list):
temp = DF[DF['Country'].isin(countries_list)]
fig, ax = plt.subplots(1,3, figsize=(16, 6))
temp.boxplot('Confirmed','Country', ax=ax[0])
temp.boxplot('Recovered', 'Country', ax=ax[1])
temp.boxplot('Deaths','Country', ax=ax[2])
give_generally_distribution_per_countries(['Poland', 'Germany', 'Czechia'])
# based on: https://opensource.com/article/20/4/python-map-covid-19
import pycountry
import plotly.express as px
import pandas as pd
list_countries = DF['Country'].unique()
d_country_code = {}
for country in list_countries:
try:
country_data = pycountry.countries.search_fuzzy(country)
country_code = country_data[0].alpha_3
d_country_code.update({country: country_code})
except:
print('could not add ISO 3 code for ->', country)
d_country_code.update({country: ' '})
for k, v in d_country_code.items():
DF.loc[(DF.Country == k), 'iso_alpha'] = v
fig = px.choropleth(data_frame = DF,
locations= "iso_alpha",
color= "Confirmed",
hover_name= "Country")
#color_continuous_scale= 'RdYlGn',
#animation_frame= "Date")
fig.show()